pop [ax]不对吗

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:22:37
如题 还有LDS 能用段寄存器吗?

POP [AX]在16位的实模式里是不对的,此时可以采用的指针寄存器只能是BX,BP,SI,DI四个里面的一个。在32位的保护模式下才可以用EAX等等其他寄存器。至于LDS指令,基本格式是 LDS REG,MEM,这里DS本身就是段寄存器,而REG是指通用寄存器,不包括段寄存器。所以,LDS不能写这样的语句: LDS ES,[1000H],只能写类似 LDS AX,[1000H]

1.pop的格式为:POP RGE/MEM
弹出一个字,系统自动完成两步操作:先,操作数←(SP),后,SP←SP-2;(弹出一个双字,系统自动完成两步操作:先,操作数←(ESP),后,ESP←ESP-4。) 因此,严格意义上讲 写成你所写的那样肯定是有错的 因为实现数据的传送,其操作数写成加〔〕的形式,无法接受数据 所以你只要注意,程式中不会有你所写的那样的 除非是某些未知操作 注意的是POP 后面是可以接段寄存器的

2.LDS指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给段寄存器DS其指令格式:
LDS Reg, Mem
因此:若Reg是16位寄存器,那么,Men必须是32位指针;若Reg是32位寄存器,那么,Men必须是48位指针,其低32位给指令中指定的寄存器,高16位给指令中的段寄存器(不是很明白你说能用段寄是指什么,不过看了我给的说明,相信你会懂LDS的用法了)

1.没有这个寻址方式,如POP [BX],POP [BX+DI]就可以
2.LDS reg mem中寄存器应为通用而不是段寄存器